<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" typeof="bibo:Document">
<head>
<title>JSON-LD Framing 1.0</title>
<meta content="text/html; charset=UTF-8" http-equiv="content-type" />

<!--
  === NOTA BENE ===
  For the three scripts below, if your spec resides on dev.w3 you can check them
  out in the same tree and use relative links so that they'll work offline,
  -->



<style type="text/css">
.diff { font-weight:bold; color:#0a3; }
</style>
<style>/*****************************************************************
 * ReSpec 3 CSS
 * Robin Berjon - http://berjon.com/
 *****************************************************************/

/* --- INLINES --- */
em.rfc2119 {
    text-transform:     lowercase;
    font-variant:       small-caps;
    font-style:         normal;
    color:              #900;
}

h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
    border: none;
}

dfn {
    font-weight:    bold;
}

a.internalDFN {
    color:  inherit;
    border-bottom:  1px solid #99c;
    text-decoration:    none;
}

a.externalDFN {
    color:  inherit;
    border-bottom:  1px dotted #ccc;
    text-decoration:    none;
}

a.bibref {
    text-decoration:    none;
}

cite .bibref {
    font-style: normal;
}

code {
    color:  #ff4500;
}


/* --- --- */
ol.algorithm { counter-reset:numsection; list-style-type: none; }
ol.algorithm li { margin: 0.5em 0; }
ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; }

/* --- TOC --- */
.toc a, .tof a {
    text-decoration:    none;
}

a .secno, a .figno {
    color:  #000;
}

ul.tof, ol.tof {
    list-style: none outside none;
}

.caption {
    margin-top: 0.5em;
    font-style:   italic;
}

/* --- TABLE --- */
table.simple {
    border-spacing: 0;
    border-collapse:    collapse;
    border-bottom:  3px solid #005a9c;
}

.simple th {
    background: #005a9c;
    color:  #fff;
    padding:    3px 5px;
    text-align: left;
}

.simple th[scope="row"] {
    background: inherit;
    color:  inherit;
    border-top: 1px solid #ddd;
}

.simple td {
    padding:    3px 10px;
    border-top: 1px solid #ddd;
}

.simple tr:nth-child(even) {
    background: #f0f6ff;
}

/* --- DL --- */
.section dd > p:first-child {
    margin-top: 0;
}

.section dd > p:last-child {
    margin-bottom: 0;
}

.section dd {
    margin-bottom:  1em;
}

.section dl.attrs dd, .section dl.eldef dd {
    margin-bottom:  0;
}
</style><style>/* --- ISSUES/NOTES --- */
div.issue-title, div.note-title {
    padding-right:  1em;
    min-width: 7.5em;
    color: #b9ab2d;
}
div.issue-title { color: #e05252; }
div.note-title { color: #52e052; }
div.issue-title span, div.note-title span {
    text-transform: uppercase;
}
div.note, div.issue {
    margin-top: 1em;
    margin-bottom: 1em;
}
.note > p:first-child, .issue > p:first-child { margin-top: 0 }
.issue, .note {
    padding: .5em;
    border-left-width: .5em;
    border-left-style: solid;
}
div.issue, div.note {
    padding: 0.5em;
    margin: 1em 0;
    position: relative;
    clear: both;
}
span.note, span.issue { padding: .1em .5em .15em; }

.issue {
    border-color: #e05252;
    background: #fbe9e9;
}
.note {
    border-color: #52e052;
    background: #e9fbe9;
}


</style><style>/* --- WEB IDL --- */
pre.idl {
    border-top: 1px solid #90b8de;
    border-bottom: 1px solid #90b8de;
    padding:    1em;
    line-height:    120%;
}

pre.idl::before {
    content:    "WebIDL";
    display:    block;
    width:      150px;
    background: #90b8de;
    color:  #fff;
    font-family:    initial;
    padding:    3px;
    font-weight:    bold;
    margin: -1em 0 1em -1em;
}

.idlType {
    color:  #ff4500;
    font-weight:    bold;
    text-decoration:    none;
}

/*.idlModule*/
/*.idlModuleID*/
/*.idlInterface*/
.idlInterfaceID, .idlDictionaryID, .idlCallbackID, .idlEnumID {
    font-weight:    bold;
    color:  #005a9c;
}

.idlSuperclass {
    font-style: italic;
    color:  #005a9c;
}

/*.idlAttribute*/
.idlAttrType, .idlFieldType, .idlMemberType {
    color:  #005a9c;
}
.idlAttrName, .idlFieldName, .idlMemberName {
    color:  #ff4500;
}
.idlAttrName a, .idlFieldName a, .idlMemberName a {
    color:  #ff4500;
    border-bottom:  1px dotted #ff4500;
    text-decoration: none;
}

/*.idlMethod*/
.idlMethType, .idlCallbackType {
    color:  #005a9c;
}
.idlMethName {
    color:  #ff4500;
}
.idlMethName a {
    color:  #ff4500;
    border-bottom:  1px dotted #ff4500;
    text-decoration: none;
}

/*.idlParam*/
.idlParamType {
    color:  #005a9c;
}
.idlParamName {
    font-style: italic;
}

.extAttr {
    color:  #666;
}

/*.idlConst*/
.idlConstType {
    color:  #005a9c;
}
.idlConstName {
    color:  #ff4500;
}
.idlConstName a {
    color:  #ff4500;
    border-bottom:  1px dotted #ff4500;
    text-decoration: none;
}

/*.idlException*/
.idlExceptionID {
    font-weight:    bold;
    color:  #c00;
}

.idlTypedefID, .idlTypedefType {
    color:  #005a9c;
}

.idlRaises, .idlRaises a.idlType, .idlRaises a.idlType code, .excName a, .excName a code {
    color:  #c00;
    font-weight:    normal;
}

.excName a {
    font-family:    monospace;
}

.idlRaises a.idlType, .excName a.idlType {
    border-bottom:  1px dotted #c00;
}

.excGetSetTrue, .excGetSetFalse, .prmNullTrue, .prmNullFalse, .prmOptTrue, .prmOptFalse {
    width:  45px;
    text-align: center;
}
.excGetSetTrue, .prmNullTrue, .prmOptTrue { color:  #0c0; }
.excGetSetFalse, .prmNullFalse, .prmOptFalse { color:  #c00; }

.idlImplements a {
    font-weight:    bold;
}

dl.attributes, dl.methods, dl.constants, dl.fields, dl.dictionary-members {
    margin-left:    2em;
}

.attributes dt, .methods dt, .constants dt, .fields dt, .dictionary-members dt {
    font-weight:    normal;
}

.attributes dt code, .methods dt code, .constants dt code, .fields dt code, .dictionary-members dt code {
    font-weight:    bold;
    color:  #000;
    font-family:    monospace;
}

.attributes dt code, .fields dt code, .dictionary-members dt code {
    background:  #ffffd2;
}

.attributes dt .idlAttrType code, .fields dt .idlFieldType code, .dictionary-members dt .idlMemberType code {
    color:  #005a9c;
    background:  transparent;
    font-family:    inherit;
    font-weight:    normal;
    font-style: italic;
}

.methods dt code {
    background:  #d9e6f8;
}

.constants dt code {
    background:  #ddffd2;
}

.attributes dd, .methods dd, .constants dd, .fields dd, .dictionary-members dd {
    margin-bottom:  1em;
}

table.parameters, table.exceptions {
    border-spacing: 0;
    border-collapse:    collapse;
    margin: 0.5em 0;
    width:  100%;
}
table.parameters { border-bottom:  1px solid #90b8de; }
table.exceptions { border-bottom:  1px solid #deb890; }

.parameters th, .exceptions th {
    color:  #fff;
    padding:    3px 5px;
    text-align: left;
    font-family:    initial;
    font-weight:    normal;
    text-shadow:    #666 1px 1px 0;
}
.parameters th { background: #90b8de; }
.exceptions th { background: #deb890; }

.parameters td, .exceptions td {
    padding:    3px 10px;
    border-top: 1px solid #ddd;
    vertical-align: top;
}

.parameters tr:first-child td, .exceptions tr:first-child td {
    border-top: none;
}

.parameters td.prmName, .exceptions td.excName, .exceptions td.excCodeName {
    width:  100px;
}

.parameters td.prmType {
    width:  120px;
}

table.exceptions table {
    border-spacing: 0;
    border-collapse:    collapse;
    width:  100%;
}
</style><link rel="stylesheet" href="http://www.w3.org/StyleSheets/TR/w3c-unofficial" />
<!--[if lt IE 9]><script src='undefined://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]-->
</head>

<body><div class="head">
  <p>

  </p>
  <h1 id="title" class="title">JSON-LD Framing 1.0</h1>

    <h2 id="subtitle">An Application Programming Interface for the JSON-LD Syntax</h2>

  <h2 id="unofficial-draft-30-august-2012">Unofficial Draft 30 August 2012</h2>
  <dl>


      <dt>Latest editor's draft:</dt>
      <dd><a href="http://json-ld.org/spec/latest/json-ld-framing/">http://json-ld.org/spec/latest/json-ld-framing/</a></dd>






    <dt>Editors:</dt>
    <dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://manu.sporny.org/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">Manu Sporny</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
</dd>
<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">Gregg Kellogg</a>, <a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">Kellogg Associates</a></span>
</dd>
<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Dave Longley" property="foaf:name" rel="foaf:homepage">Dave Longley</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
</dd>
<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">Markus Lanthaler</a>, <a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">Graz University of Technology</a></span>
</dd>


      <dt>Authors:</dt>
      <dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Dave Longley" property="foaf:name" rel="foaf:homepage">Dave Longley</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
</dd>
<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">Manu Sporny</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
</dd>
<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">Gregg Kellogg</a>, <a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">Kellogg Associates</a></span>
</dd>
<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">Markus Lanthaler</a>, <a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">Graz University of Technology</a></span>
</dd>


  </dl>






        <p class="copyright">
          This document is licensed under a
          <a rel="license" href="http://creativecommons.org/licenses/by/3.0/" class="subfoot">Creative Commons
          Attribution 3.0 License</a>.
        </p>



  <hr />
</div>
<section id="abstract" class="introductory"><h2>Abstract</h2>
<p>JSON-LD Framing allows developers to query by example and
  force a specific tree layout to a JSON-LD document.</p>
</section><section class="introductory" id="sotd"><h2>Status of This Document</h2>

    <p>
      This document is merely a public working draft of a potential specification. It has
      no official standing of any kind and does not represent the support or consensus of any
      standards organisation.
    </p>

<p>This document is an experimental work in progress.</p>

<!-- <p>
This document has been reviewed by W3C Members, by software
developers, and by other W3C groups and interested parties, and is
endorsed by the Director as a W3C Recommendation. It is a stable
document and may be used as reference material or cited from another
document. W3C's role in making the Recommendation is to draw attention
to the specification and to promote its widespread deployment. This
enhances the functionality and interoperability of the Web.
</p> -->



</section><section id="toc"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a><ul class="toc"><li class="tocline"><a href="#how-to-read-this-document" class="tocxref"><span class="secno">1.1 </span>How to Read this Document</a></li><li class="tocline"><a href="#general-terminology" class="tocxref"><span class="secno">1.2 </span>General Terminology</a></li><li class="tocline"><a href="#contributing" class="tocxref"><span class="secno">1.3 </span>Contributing</a></li></ul></li><li class="tocline"><a href="#the-application-programming-interface" class="tocxref"><span class="secno">2. </span>The Application Programming Interface</a><ul class="toc"><li class="tocline"><a href="#jsonldprocessor" class="tocxref"><span class="secno">2.1 </span>JsonLdProcessor</a><ul class="toc"><li class="tocline"><a href="#methods" class="tocxref"><span class="secno">2.1.1 </span>Methods</a></li></ul></li><li class="tocline"><a href="#callbacks" class="tocxref"><span class="secno">2.2 </span>Callbacks</a><ul class="toc"><li class="tocline"><a href="#jsonldcallback" class="tocxref"><span class="secno">2.2.1 </span>JsonLdCallback</a></li></ul></li><li class="tocline"><a href="#data-structures" class="tocxref"><span class="secno">2.3 </span>Data Structures</a><ul class="toc"><li class="tocline"><a href="#jsonldoptions" class="tocxref"><span class="secno">2.3.1 </span>JsonLdOptions</a></li></ul></li></ul></li><li class="tocline"><a href="#algorithms" class="tocxref"><span class="secno">3. </span>Algorithms</a><ul class="toc"><li class="tocline"><a href="#syntax-tokens-and-keywords" class="tocxref"><span class="secno">3.1 </span>Syntax Tokens and Keywords</a></li><li class="tocline"><a href="#algorithm-terms" class="tocxref"><span class="secno">3.2 </span>Algorithm Terms</a></li><li class="tocline"><a href="#framing" class="tocxref"><span class="secno">3.3 </span>Framing</a><ul class="toc"><li class="tocline"><a href="#framing-algorithm-terms" class="tocxref"><span class="secno">3.3.1 </span>Framing Algorithm Terms</a></li><li class="tocline"><a href="#framing-algorithm" class="tocxref"><span class="secno">3.3.2 </span>Framing Algorithm</a></li><li class="tocline"><a href="#remove-embed" class="tocxref"><span class="secno">3.3.3 </span>Remove Embedded Definition</a></li><li class="tocline"><a href="#embed-values" class="tocxref"><span class="secno">3.3.4 </span>Embed Values</a></li></ul></li></ul></li><li class="tocline"><a href="#iana-considerations" class="tocxref"><span class="secno">A. </span>IANA Considerations</a></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">B. </span>Acknowledgements</a></li><li class="tocline"><a href="#references" class="tocxref"><span class="secno">C. </span>References</a><ul class="toc"><li class="tocline"><a href="#normative-references" class="tocxref"><span class="secno">C.1 </span>Normative references</a></li><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">C.2 </span>Informative references</a></li></ul></li></ul></section>



<section id="introduction">

<!--OddPage-->
<h2><span class="secno">1. </span>Introduction</h2>
<p>A JSON-LD document is a representation of a directed graph. A single
  directed graph can have many different serializations, each expressing
  exactly the same information. Developers typically work with trees, represented as
  <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>s. While mapping a graph to
  a tree can be done, the layout of the end result must be specified in advance.
  A <dfn title="frame" id="dfn-frame">Frame</dfn> can be used by a developer on a JSON-LD document to
  specify a deterministic layout for a graph.</p>

<section id="how-to-read-this-document">
<h3><span class="secno">1.1 </span>How to Read this Document</h3>

<p>
This document is a detailed specification for a serialization of Linked
Data in JSON. The document is primarily intended for the following audiences:
</p>

<ul>
  <li>Authors who want to query JSON-LD documents to create representations
    more appropriate for a given use case.</li>
  <li>Software developers that want to implement processors and APIs for
  JSON-LD.</li>
</ul>

<p>
To understand the basics in this specification you must first be familiar with
JSON, which is detailed in [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>]. You must also understand the
JSON-LD Syntax [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>], which is the base syntax used by all of the
algorithms in this document,
and the JSON-LD API [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>]. To understand the API and how it is
intended to operate  in a programming environment, it is useful to have working
knowledge of the JavaScript programming language [<cite><a class="bibref" href="#bib-ECMA-262">ECMA-262</a></cite>] and
WebIDL [<cite><a class="bibref" href="#bib-WEBIDL">WEBIDL</a></cite>]. To understand how JSON-LD maps to RDF, it is helpful to be
familiar with the basic RDF concepts [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].</p>

</section>

<section id="general-terminology">
  <h3><span class="secno">1.2 </span>General Terminology</h3>

  <div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">The intent of the Working Group and the Editors of this
    specification is to eventually align terminology used in this document
    with the terminology used in the RDF Concepts document to the extent to
    which it makes sense to do so. In general, if there is an analogue to
    terminology used in this document in the RDF Concepts document, the
    preference is to use the terminology in the RDF Concepts document.
  </p></div>

  <p>The following is an explanation of the general terminology used in this document:</p>
  <dl>
    <dt><dfn title="json_object" id="dfn-json_object">JSON object</dfn></dt>
    <dd>An object structure is represented as a pair of curly brackets surrounding zero or
      more name-value pairs. A name is a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>. A single colon comes after
      each name, separating the name from the value. A single comma separates a value
      from a following name. The names within an object <em class="rfc2119" title="should">should</em> be unique.</dd>
    <dt><dfn title="array" id="dfn-array">array</dfn></dt>
    <dd>An array is represented as square brackets surrounding zero or more
      values that are separated by commas.</dd>
    <dt><dfn title="string" id="dfn-string">string</dfn></dt>
    <dd>A string is a sequence of zero or more Unicode (UTF-8) characters,
      wrapped in double quotes, using backslash escapes (if necessary). A
      character is represented as a single character string.</dd>
    <dt><dfn title="number" id="dfn-number">number</dfn></dt>
    <dd>A number is similar to that used in most programming languages, except
      that the octal and hexadecimal formats are not used and that leading
      zeros are not allowed.</dd>
    <dt><dfn title="true" id="dfn-true">true</dfn> and <dfn title="false" id="dfn-false">false</dfn></dt>
    <dd>Values that are used to express one of two possible boolean states.</dd>
    <dt><dfn title="null" id="dfn-null">null</dfn></dt>
    <dd>The use of the <a class="tref internalDFN" title="null" href="#dfn-null">null</a> value within JSON-LD is used to ignore or reset values.</dd>
    <dt><dfn title="keyword" id="dfn-keyword">keyword</dfn></dt>
    <dd>A JSON key that is specific to JSON-LD, specified in the JSON-LD Syntax specification [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>]
      in the section titled <cite><a href="../json-ld-syntax/#syntax-tokens-and-keywords">Syntax Tokens and Keywords</a></cite>.</dd>
    <dt><dfn title="context" id="dfn-context">context</dfn></dt>
    <dd>A a set of rules for interpreting a JSON-LD document as specified in
      <cite><a href="../json-ld-syntax/#the-context">The Context</a></cite> of the [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>] specification.</dd>
    <dt><dfn title="iri" id="dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></dfn></dt>
    <dd>An Internationalized Resource Identifier as described in [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>].</dd>
    <dt><dfn title="linked_data" id="dfn-linked_data">Linked Data</dfn></dt>
    <dd>A set of documents, each containing a representation of a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</dd>
    <dt><dfn title="linked_data_graph" id="dfn-linked_data_graph">linked data graph</dfn> or <dfn title="dataset" id="dfn-dataset">dataset</dfn></dt>
    <dd>An unordered labeled directed graph, where <a class="tref internalDFN" title="node" href="#dfn-node">nodes</a> are
      <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> or <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">Blank Nodes</a>, or other values.
      A <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> is a generalized representation of a
      <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-graph">RDF graph</a></cite>
      as defined in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].</dd>
    <dt><dfn title="named_graph" id="dfn-named_graph">named graph</dfn></dt>
    <dd>A <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> that is identified by an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</dd>
    <dt><dfn title="graph_name" id="dfn-graph_name">graph name</dfn></dt>
    <dd>The <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> identifying a <a class="tref internalDFN" title="named_graph" href="#dfn-named_graph">named graph</a>.</dd>
    <dt><dfn title="default_graph" id="dfn-default_graph">default graph</dfn></dt>
    <dd>When executing an algorithm, the graph where data should be placed
      if a <a class="tref internalDFN" title="named_graph" href="#dfn-named_graph">named graph</a> is not specified.</dd>
    <dt><dfn title="node" id="dfn-node">node</dfn></dt>
    <dd>A piece of information that is represented in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</dd>
    <dt><dfn title="node_definition" id="dfn-node_definition">node definition</dfn></dt>
    <dd>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to represent a <a class="tref internalDFN" title="node" href="#dfn-node">node</a> and
      one or more properties of that node. A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is a
      node definition if it does not contain they keys <code>@value</code>,
      <code>@list</code> or <code>@set</code> and it has one or more keys
      other than <code>@id</code>.</dd>
    <dt><dfn title="node_reference" id="dfn-node_reference">node reference</dfn></dt>
    <dd>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to reference a node having only the
      <code>@id</code> key.</dd>
    <dt><dfn title="blank_node" id="dfn-blank_node">blank node</dfn></dt>
    <dd>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> in the <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> that does not contain a de-referenceable
      identifier because it is either ephemeral in nature or does not contain information that needs to be
      linked to from outside of the linked data graph. A blank node is assigned an identifier starting with
      the prefix <code>_:</code>.</dd>
    <dt><dfn title="property" id="dfn-property">property</dfn></dt>
    <dd>The <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> label of an edge in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</dd>
    <dt><dfn title="subject" id="dfn-subject">subject</dfn></dt>
    <dd>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> with at least one outgoing edge, related to an <a class="tref internalDFN" title="object" href="#dfn-object">object</a> node through a <a class="tref internalDFN" title="property" href="#dfn-property">property</a>.</dd>
    <dt><dfn title="object" id="dfn-object">object</dfn></dt>
    <dd>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> with at least one incoming edge.</dd>
    <dt><dfn title="quad" id="dfn-quad">quad</dfn></dt>
    <dd>A piece of information that contains four items; a <a class="tref internalDFN" title="subject" href="#dfn-subject">subject</a>, a <a class="tref internalDFN" title="property" href="#dfn-property">property</a>,
      an <a class="tref internalDFN" title="object" href="#dfn-object">object</a>, and a <a class="tref internalDFN" title="graph_name" href="#dfn-graph_name">graph name</a>.</dd>
    <dt><dfn title="literal" id="dfn-literal">literal</dfn></dt>
    <dd>An <a class="tref internalDFN" title="object" href="#dfn-object">object</a> expressed as a value such as a string, number or in expanded form.</dd>
  </dl>
<p></p>
</section>

<section id="contributing">
  <h3><span class="secno">1.3 </span>Contributing</h3>

  <p>There are a number of ways that one may participate in the development of
    this specification:</p>

  <ul>
    <li>Technical discussion typically occurs on the public mailing list:
      <a href="http://lists.w3.org/Archives/Public/public-linked-json/">public-linked-json@w3.org</a></li>

    <li><a href="http://json-ld.org/minutes/">Public teleconferences</a> are held
      on Tuesdays at 1500UTC on the second and fourth week of each month.</li>

    <li>Specification bugs and issues should be reported in the
      <a href="https://github.com/json-ld/json-ld.org/issues">issue tracker</a>.</li>

    <li><a href="https://github.com/json-ld/json-ld.org/tree/main/spec">Source code</a> for the
      specification can be found on Github.</li>

    <li>The <a href="http://webchat.freenode.net/?channels=json-ld">#json-ld</a>
      IRC channel is available for real-time discussion on irc.freenode.net.</li>
  </ul>

</section>

</section>

<section id="the-application-programming-interface">

<!--OddPage-->
<h2><span class="secno">2. </span>The Application Programming Interface</h2>

  <p>This API provides a clean mechanism that enables developers to convert
  JSON-LD data into a a variety of output formats that are easier to work with in
  various programming languages. If a JSON-LD API is provided in a programming
  environment, the entirety of the following API <em class="rfc2119" title="must">must</em> be implemented.
  </p>

  <section id="jsonldprocessor">
    <h3><span class="secno">2.1 </span>JsonLdProcessor</h3>

    <p>The JSON-LD processor interface is the high-level programming structure that developers
      use to access the JSON-LD transformation methods. The definition below is an experimental
      extension of the interface defined in the [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>

    <div class="note"><div class="note-title"><span>Note</span></div><p class="">The JSON-LD API signatures are the same across all programming languages. Due
      to the fact that asynchronous programming is uncommon in certain languages, developers <em class="rfc2119" title="may">may</em>
      implement processor with a synchronous interface instead. In that case, the <code>callback</code>
      parameter <em class="rfc2119" title="must not">must not</em> be included and the result <em class="rfc2119" title="must">must</em> be returned as return value instead.</p></div>

    <pre class="idl"><span id="idl-def-JsonLdProcessor" class="idlInterface">[<span class="extAttr">NoInterfaceObject</span>]
interface <span class="idlInterfaceID">JsonLdProcessor</span> {
<span class="idlMethod">    <span class="idlMethType"><a>void</a></span> <span class="idlMethName"><a href="#widl-JsonLdProcessor-frame-void-object-or-object---or-IRI-input-object-or-IRI-frame-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options">frame</a></span> (<span class="idlParam"><span class="idlParamType"><a>object or object[] or IRI</a></span> <span class="idlParamName">input</span></span>, <span class="idlParam"><span class="idlParamType"><a>object or IRI</a></span> <span class="idlParamName">frame</span></span>, <span class="idlParam"><span class="idlParamType"><a>object or IRI</a>?</span> <span class="idlParamName">context</span></span>, <span class="idlParam"><span class="idlParamType"><a>JsonLdCallback</a></span> <span class="idlParamName">callback</span></span>, <span class="idlParam">optional <span class="idlParamType"><a>JsonLdOptions</a>?</span> <span class="idlParamName">options</span></span>);</span>
};</span></pre><section id="methods"><h4><span class="secno">2.1.1 </span>Methods</h4><dl class="methods"><dt id="widl-JsonLdProcessor-frame-void-object-or-object---or-IRI-input-object-or-IRI-frame-object-or-IRI-context-JsonLdCallback-callback-JsonLdOptions-options"><code>frame</code></dt><dd>
        <a href="#framing">Frames</a> the given <code>input</code> using the
        <code>frame</code> according to the steps in the
        <a href="#framing-algorithm">Framing Algorithm</a>. The <code>input</code>
        is used to build the framed output and is returned if there are no errors.
        If there are no matches for the frame, <a class="tref internalDFN" title="null" href="#dfn-null">null</a> <em class="rfc2119" title="must">must</em> be
        returned. Exceptions <em class="rfc2119" title="must">must</em> be thrown if there are errors.


      <table class="parameters"><tr><th>Parameter</th><th>Type</th><th>Nullable</th><th>Optional</th><th>Description</th></tr><tr><td class="prmName">input</td><td class="prmType"><code><a>object or object[] or IRI</a></code></td><td class="prmNullFalse">âœ˜</td><td class="prmOptFalse">âœ˜</td><td class="prmDesc">The JSON-LD object or array of JSON-LD objects to perform the framing upon or an
            <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> referencing the JSON-LD document to frame.</td></tr><tr><td class="prmName">frame</td><td class="prmType"><code><a>object or IRI</a></code></td><td class="prmNullFalse">âœ˜</td><td class="prmOptFalse">âœ˜</td><td class="prmDesc">The frame to use when re-arranging the data of <code>input</code>; either
            in the form of an <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> or as <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</td></tr><tr><td class="prmName">context</td><td class="prmType"><code><a>object or IRI</a></code></td><td class="prmNullTrue">âœ”</td><td class="prmOptFalse">âœ˜</td><td class="prmDesc">An optional external context to use additionally to the context embedded in
            <code>input</code> when expanding the <code>input</code>.</td></tr><tr><td class="prmName">callback</td><td class="prmType"><code><a>JsonLdCallback</a></code></td><td class="prmNullFalse">âœ˜</td><td class="prmOptFalse">âœ˜</td><td class="prmDesc">A callback that is called when processing is complete on
            the given <code>input</code>.</td></tr><tr><td class="prmName">options</td><td class="prmType"><code><a>JsonLdOptions</a></code></td><td class="prmNullTrue">âœ”</td><td class="prmOptTrue">âœ”</td><td class="prmDesc">A set of options that <em class="rfc2119" title="may">may</em> affect the framing algorithm such as, e.g., the
            input document's base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</td></tr></table><div><em>Return type: </em><code><a>void</a></code></div></dd></dl></section>

  </section>

  <section id="callbacks">
    <h3><span class="secno">2.2 </span>Callbacks</h3>
  <section id="jsonldcallback">
    <h4><span class="secno">2.2.1 </span>JsonLdCallback</h4>
    <p>The <a>JsonLdCallback</a> is used to return a processed JSON-LD representation
      as the result of processing an API method.</p>
    <p>See <a class="externalDFN" title="JsonLdCallback">JsonLdCallback</a> definition in [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>
  </section>
  </section>

  <section id="data-structures">
    <h3><span class="secno">2.3 </span>Data Structures</h3>
    <p>This section describes datatype definitions used within the JSON-LD API.</p>

    <section id="jsonldoptions">
    <h4><span class="secno">2.3.1 </span>JsonLdOptions</h4>
    <p>The <a>JsonLdOptions</a> type is used to convert a set of options to an interface method.</p>
    <p>See <a class="externalDFN" title="JsonLdOptions">JsonLdOptions</a> definition in [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>
    </section>
  </section>

</section>

<section id="algorithms">

<!--OddPage-->
<h2><span class="secno">3. </span>Algorithms</h2>

<p>All algorithms described in this section are intended to operate on
language-native data structures. That is, the serialization to a text-based
JSON document isn't required as input or output to any of these algorithms and
language-native data structures <em class="rfc2119" title="must">must</em> be used where applicable.</p>

<section id="syntax-tokens-and-keywords">
  <h3><span class="secno">3.1 </span>Syntax Tokens and Keywords</h3>

  <p>This specification adds a number of <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a> to
    the ones defined in the [<cite><a class="bibref" href="#bib-JSON-LD">JSON-LD</a></cite>] specification:</p>

  <dl>
    <dt><code>@default</code></dt>
    <dd>Used in <a href="#framing">Framing</a> to set the default value for
      an output property when the framed <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> does not include such a property.</dd>
    <dt><code>@explicit</code></dt>
    <dd>Used in <a href="#framing">Framing</a> to override the
      value of <a class="tref internalDFN" title="explicit_inclusion_flag" href="#dfn-explicit_inclusion_flag">explicit inclusion flag</a> within a specific frame.</dd>
    <dt><code>@omitDefault</code></dt>
    <dd>Used in <a href="#framing">Framing</a> to override the
      value of <a class="tref internalDFN" title="omit_default_flag" href="#dfn-omit_default_flag">omit default flag</a> within a specific frame.</dd>
    <dt><code>@embed</code></dt>
    <dd>Used in <a href="#framing">Framing</a> to override the
      value of <a class="tref internalDFN" title="object_embed_flag" href="#dfn-object_embed_flag">object embed flag</a> within a specific frame.</dd>
    <dt><code>@null</code></dt>
    <dd>Used in <a href="#framing">Framing</a> when a value of <a class="tref internalDFN" title="null" href="#dfn-null">null</a>
      should be returned, which would otherwise be removed when
      <a href="../json-ld-api/index.html#compaction">Compacting</a>.</dd>
  </dl>

  <p>All JSON-LD tokens and keywords are case-sensitive.</p>
</section>

<section id="algorithm-terms">
  <h3><span class="secno">3.2 </span>Algorithm Terms</h3>
  <dl>
    <dt><dfn title="active_subject" id="dfn-active_subject">active subject</dfn></dt>
    <dd>
      the currently active subject that the processor should use when
      processing.
    </dd>
    <dt><dfn title="active_property" id="dfn-active_property">active property</dfn></dt>
    <dd>
      the currently active property that the processor should use when
      processing. The active property is represented in the original lexical form, which
      is used for finding coercion mappings in the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.
    </dd>
    <dt><dfn title="active_object" id="dfn-active_object">active object</dfn></dt>
    <dd>
      the currently active object that the processor should use when
      processing.
    </dd>
    <dt><dfn title="active_context" id="dfn-active_context">active context</dfn></dt>
    <dd>
      a context that is used to resolve <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s while the processing
      algorithm is running. The <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> is the context
      contained within the <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a>.
    </dd>
    <dt><dfn title="compact_iri" id="dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn></dt>
    <dd>
      a compact <abbr title="Internationalized Resource Identifier">IRI</abbr> is has the form of <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> and <em>suffix</em> and is used as a way
      of expressing an <abbr title="Internationalized Resource Identifier">IRI</abbr> without needing to define separate <a class="tref internalDFN" title="term" href="#dfn-term">term</a> definitions for
      each <abbr title="Internationalized Resource Identifier">IRI</abbr> contained within a common vocabulary identified by <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a>.
    </dd>
    <dt><dfn title="local_context" id="dfn-local_context">local context</dfn></dt>
    <dd>
      a context that is specified within a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>,
      specified via the <code>@context</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>.
    </dd>
    <dt><dfn title="processor_state" id="dfn-processor_state">processor state</dfn></dt>
    <dd>
      the <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a>, which includes the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active
      context</a>, <a class="tref internalDFN" title="active_subject" href="#dfn-active_subject">active subject</a>, and
      <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>. The <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a> is managed
      as a stack with elements from the previous <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a>
      copied into a new <a class="tref internalDFN" title="processor_state" href="#dfn-processor_state">processor state</a> when entering a new
      <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>.
    </dd>
    <dt><dfn title="json-ld_input" id="dfn-json-ld_input">JSON-LD input</dfn></dt>
    <dd>
      The JSON-LD data structure that is provided as input to the algorithm.
    </dd>
    <dt><dfn title="json-ld_output" id="dfn-json-ld_output">JSON-LD output</dfn></dt>
    <dd>
      The JSON-LD data structure that is produced as output by the algorithm.
    </dd>
    <dt><dfn title="term" id="dfn-term">term</dfn></dt><dd>
      A <a class="tref internalDFN" title="term" href="#dfn-term">term</a> is a short word defined in a context that <em class="rfc2119" title="may">may</em> be expanded to an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>
    </dd>
    <dt><dfn title="prefix" id="dfn-prefix">prefix</dfn></dt><dd>
      A <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> is a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> that expands to a vocabulary base <abbr title="Internationalized Resource Identifier">IRI</abbr>. It
      is typically used along with a <em>suffix</em> to form a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> to create an <abbr title="Internationalized Resource Identifier">IRI</abbr>
      within a vocabulary.
    </dd>
    <dt><dfn title="language-tagged_string" id="dfn-language-tagged_string">language-tagged string</dfn></dt><dd>
      A <a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a> is a <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a> without a datatype, including
      a language. See <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-language-tagged-string">languaged-tagged string</a></cite>
      in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].
    </dd>
    <dt><dfn title="typed_literal" id="dfn-typed_literal">typed literal</dfn></dt><dd>
      A <a class="tref internalDFN" title="typed_literal" href="#dfn-typed_literal">typed literal</a> is a <a class="tref internalDFN" title="literal" href="#dfn-literal">literal</a> with an associated <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>
      which indicates the literal's datatype.
      See <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-typed-literal">languaged-tagged literal</a></cite> in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].
    </dd>
  </dl>
</section>

<section id="framing">
<h3><span class="secno">3.3 </span>Framing</h3>
<p>Framing is the process of taking a JSON-LD document, which expresses a
  graph of information, and applying a specific graph layout
  (called a <a class="tref internalDFN" title="frame" href="#dfn-frame">Frame</a>).</p>

<p>Framing makes use of the <a href="../json-ld-api/index.html#node-map-generation">Node Map Generation</a> algorithm
  to place each object defined in the JSON-LD document into a flat list of objects, allowing
  them to be operated upon by the framing algorithm.</p>

<section id="framing-algorithm-terms">
<h4><span class="secno">3.3.1 </span>Framing Algorithm Terms</h4>

<dl>
  <dt><dfn title="input_frame" id="dfn-input_frame">input frame</dfn></dt>
  <dd>the initial <a class="tref internalDFN" title="frame" href="#dfn-frame">frame</a> provided to the framing algorithm.</dd>
  <dt><dfn title="framing_context" id="dfn-framing_context">framing context</dfn></dt>
  <dd>a context containing a <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>, the
    <a class="tref internalDFN" title="object_embed_flag" href="#dfn-object_embed_flag">object embed flag</a>, the
    <a class="tref internalDFN" title="explicit_inclusion_flag" href="#dfn-explicit_inclusion_flag">explicit inclusion flag</a> and the
    <a class="tref internalDFN" title="omit_default_flag" href="#dfn-omit_default_flag">omit default flag</a>.</dd>
  <dt><dfn title="map_of_embeds" id="dfn-map_of_embeds">map of embeds</dfn></dt>
  <dd>a map that tracks if a subject is to be embedded in the output of the
    <a href="#framing-algorithm">Framing Algorithm</a>; it maps a subject
    <code>@id</code> to a parent <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> and property
    or parent array.</dd>
  <dt><dfn title="object_embed_flag" id="dfn-object_embed_flag">object embed flag</dfn></dt>
  <dd>a flag specifying that objects should be directly embedded in the output,
    instead of being referred to by their <abbr title="Internationalized Resource Identifier">IRI</abbr>.</dd>
  <dt><dfn title="explicit_inclusion_flag" id="dfn-explicit_inclusion_flag">explicit inclusion flag</dfn></dt>
  <dd>a flag specifying that for properties to be included in the output, they
    must be explicitly declared in the <a class="tref internalDFN" title="framing_context" href="#dfn-framing_context">framing context</a>.</dd>
  <dt><dfn title="omit_default_flag" id="dfn-omit_default_flag">omit default flag</dfn></dt>
  <dd>a flag specifying that properties that are missing from the
    <a class="tref internalDFN" title="json-ld_input" href="#dfn-json-ld_input">JSON-LD input</a>, but present in the <a class="tref internalDFN" title="input_frame" href="#dfn-input_frame">input frame</a>
    should be omitted from the output.</dd>
  <dt><dfn title="map_of_flattened_subjects" id="dfn-map_of_flattened_subjects">map of flattened subjects</dfn></dt>
  <dd>a map of subjects that is the result of the
    <a href="../json-ld-api/index.html#node-map-generation">Node Map Generation algorithm</a>.</dd>
</dl>
</section>

<section id="framing-algorithm">
<h4><span class="secno">3.3.2 </span>Framing Algorithm</h4>

<div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/118"><span>Issue 118</span></a></div><p class="">This algorithm is a work in progress. Presently, it only works
  for documents without named graphs.</p></div>

<div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/110"><span>Issue 110</span></a></div><p class="">Currently, framing allows just to select node definitions based
  on <code>@type</code> matching or duck typing for included properties. It allows value properties to
  be explicitly matched based on defining the property and excluding things that are undefined, but it
  does not allow to be more specific about the types of values selected. Allowing this is currently
  being discussed.</p></div>

<p>The framing algorithm takes an <a class="tref internalDFN" title="json-ld_input" href="#dfn-json-ld_input">JSON-LD input</a> (<strong>expanded input</strong>)
  and an <a class="tref internalDFN" title="input_frame" href="#dfn-input_frame">input frame</a> (<strong>expanded frame</strong>) that have been expanded
  according to the <a href="../json-ld-api/index.html#expansion-algorithm">Expansion Algorithm</a>,
  and a number of options and produces <a class="tref internalDFN" title="json-ld_output" href="#dfn-json-ld_output">JSON-LD output</a>.</p>

<p>Create <a class="tref internalDFN" title="framing_context" href="#dfn-framing_context">framing context</a> using <a class="tref internalDFN" title="null" href="#dfn-null">null</a> for the <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>,
    the <a class="tref internalDFN" title="object_embed_flag" href="#dfn-object_embed_flag">object embed flag</a> set to <a class="tref internalDFN" title="true" href="#dfn-true">true</a>, the
    <a class="tref internalDFN" title="explicit_inclusion_flag" href="#dfn-explicit_inclusion_flag">explicit inclusion flag</a> set to <a class="tref internalDFN" title="false" href="#dfn-false">false</a>, and the
    <a class="tref internalDFN" title="omit_default_flag" href="#dfn-omit_default_flag">omit default flag</a> set to <a class="tref internalDFN" title="false" href="#dfn-false">false</a> along with <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a>
    set to the <code>@merged</code> property of the result of performing the
    <a href="../json-ld-api/index.html#node-map-generation">Node Map Generation</a> algorithm on
    <strong>expanded input</strong>. Also create <em>results</em> as an empty <a class="tref internalDFN" title="array" href="#dfn-array">array</a>.</p>

<p>Invoke the recursive algorithm using <a class="tref internalDFN" title="framing_context" href="#dfn-framing_context">framing context</a> (<em>state</em>),
  the <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a> (<em>subjects</em>),
  <strong>expanded frame</strong> (<em>frame</em>), <em>result</em> as <em>parent</em>, and
  <a class="tref internalDFN" title="null" href="#dfn-null">null</a> as <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.</p>

<p>The following series of steps is the recursive
  portion of the framing algorithm:</p>

<ol class="algorithm">
  <li>Validate <em>frame</em>.</li>
  <li>Create a set of matched subjects by filtering <em>subjects</em> checking
    the <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a> against <em>frame</em>:
    <ol class="algorithm">
      <li>If <em>frame</em> has a <code>@type</code> property containing
        one or more <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> match any <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>
        with a <code>@type</code> property including any of those <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a>.</li>
      <li>Otherwise, if <em>frame</em> has a <code>@type</code> property only
        a empty <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>, matches any <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>
        with a <code>@type</code> property, regardless of the actual values.</li>
      <li>Otherwise, match if the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains all of the
        non-<a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> properties in <em>frame</em>.</li>
    </ol>
  </li>
  <li>Get values for <em>embedOn</em> and <em>explicitOn</em> by looking in <em>frame</em>
    for the keys <code>@embed</code> and <code>@explicit</code> using the current values
    for <a class="tref internalDFN" title="object_embed_flag" href="#dfn-object_embed_flag">object embed flag</a> and <a class="tref internalDFN" title="explicit_inclusion_flag" href="#dfn-explicit_inclusion_flag">explicit inclusion flag</a> from <em>state</em> if not found.</li>
  <li>For each <em>id</em> and <em>subject</em> from the set of matched subjects, ordered by <em>id</em>:
    <ol class="algorithm">
      <li>If the <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> is <a class="tref internalDFN" title="null" href="#dfn-null">null</a>, set the <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a> in
        <em>state</em> to an empty map.</li>
      <li>Initialize <em>output</em> with <code>@id</code> and <em>id</em>.</li>
      <li>Initialize <em>embed</em> with <em>parent</em> and <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> to
        <em>property</em>.</li>
      <li>If <em>embedOn</em> is <a class="tref internalDFN" title="true" href="#dfn-true">true</a>, and <em>id</em> is in <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>
        from <em>state</em>:
        <ol class="algorithm">
          <li>Set <em>existing</em> to the value of <em>id</em> in <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>
            and set <em>embedOn</em> to <a class="tref internalDFN" title="false" href="#dfn-false">false</a>.</li>
          <li>If <em>existing</em> has a <em>parent</em> which is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> containing a
            <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with <code>@id</code> equal to <em>id</em>, <em>element</em> has
            already been embedded and can be overwritten, so set <em>embedOn</em> to <a class="tref internalDFN" title="true" href="#dfn-true">true</a>.</li>
          <li>Otherwise, <em>existing</em> has a <em>parent</em> which is a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>.
            Set <em>embedOn</em> to <a class="tref internalDFN" title="true" href="#dfn-true">true</a> if any of the items in <em>parent</em> <em>property</em>
            is a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>
            or <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a> for <em>id</em> because the embed can be overwritten.
          </li>
          <li>If <em>embedOn</em> is <a class="tref internalDFN" title="true" href="#dfn-true">true</a>, <em>existing</em> is already embedded but
            can be overwritten, so <a href="#remove-embed">Remove Embedded Definition</a> for <em>id</em>.
          </li>
        </ol>
      </li>
      <li>If <em>embedOn</em> is <a class="tref internalDFN" title="false" href="#dfn-false">false</a>, add <em>output</em> to <em>parent</em>
        by either appending to <em>parent</em> if it is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, or appending
        to <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> in <em>parent</em> otherwise.</li>
      <li>Otherwise:
        <ol class="algorithm">
          <li>Add <em>embed</em> to <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a> for <em>id</em>.</li>
          <li>Process each <em>property</em> and <em>value</em> in the matched <em>subject</em>, ordered
            by <em>property</em>:
            <ol class="algorithm">
              <li>If <em>property</em> is a <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>, add <em>property</em> and a copy of <em>value</em>
                to <em>output</em> and continue with the next property from <em>subject</em>.</li>
              <li>If <em>property</em> is not in <em>frame</em>:
                <ol class="algorithm">
                  <li>If <em>explicitOn</em> is <a class="tref internalDFN" title="false" href="#dfn-false">false</a>, <a href="#embed-values">Embed values</a>
                    from <em>subject</em> in <em>output</em> using <em>subject</em> as <em>element</em> and
                    <em>property</em> as <em>active property</em>.</li>
                  <li>Continue to next property.</li>
                </ol>
              </li>
              <li id="frm-process-prop-item">Process each <em>item</em> from <em>value</em> as follows:
                <ol class="algorithm">
                  <li>If <em>item</em> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with the key <code>@list</code>, then
                    create a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> named <em>list</em> with the key <code>@list</code> and
                    the value of an empty array. Append <em>list</em> to <em>property</em> in
                    <em>output</em>. Process each <em>listitem</em> in the <code>@list</code> array as follows:
                    <ol class="algorithm">
                      <li>If <em>listitem</em> is a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>
                        process <em>listitem</em> recursively using this algorithm passing a new map of
                        <em>subjects</em> that contains the <code>@id</code> of <em>listitem</em> as the key
                        and the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> from the original <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a>
                        as the value. Pass the first value from
                        <em>frame</em> for <em>property</em> as <em>frame</em>, <em>list</em>
                        as <em>parent</em>, and <code>@list</code> as <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.</li>
                      <li>Otherwise, append a copy of <em>listitem</em> to <code>@list</code> in <em>list</em>.</li>
                    </ol>
                  </li>
                  <li>If <em>item</em> is a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>
                    process <em>item</em> recursively using this algorithm passing a new map as
                    <em>subjects</em> that contains the <code>@id</code> of <em>item</em> as the key and
                    the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> from the original <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a>
                    as the value. Pass the first value from
                    <em>frame</em> for <em>property</em> as <em>frame</em>, <em>output</em>
                    as <em>parent</em>, and <em>property</em> as <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>.
                  <div class="issue"><div class="issue-title"><span>Issue</span></div><div class="">Passing a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a> doesn't work if this map
                    is used recursively. Presently pass <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> from original
                    <a class="tref internalDFN" title="map_of_flattened_subjects" href="#dfn-map_of_flattened_subjects">map of flattened subjects</a>.</div></div></li>
                  <li>Otherwise, append a copy of <em>item</em> to <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> in
                    <em>output</em>.</li>
                </ol>
              </li>
            </ol>
          </li>
          <li>Process each <em>property</em> and <em>value</em> in <em>frame</em>,
            where <em>property</em> is not a <em>keyword</em>, ordered by <em>property</em>:
            <ol class="algorithm">
              <li>Set <em>property frame</em> to the first item in <em>value</em> or a newly created
                <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> if <em>value</em> is empty.</li>
              <li>Skip to the next property in <em>frame</em> if <em>property</em> is in <em>output</em>
                or if <em>property frame</em> contains
                <code>@omitDefault</code> which is <a class="tref internalDFN" title="true" href="#dfn-true">true</a> or if it does not contain
                <code>@omitDefault</code> but the value of <a class="tref internalDFN" title="omit_default_flag" href="#dfn-omit_default_flag">omit default flag</a>
                <a class="tref internalDFN" title="true" href="#dfn-true">true</a>.</li>
              <li>Set the value of <em>property</em> in <em>output</em> to a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>
                with a property <code>@preserve</code> and a value that is a copy of the value
                of <code>@default</code> in <em>frame</em> if it exists, or the string
                <code>@null</code> otherwise.</li>
            </ol>
          </li>
          <li>Add <em>output</em> to <em>parent</em>.
            If <em>parent</em> is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, append <em>output</em>, otherwise
            append <em>output</em> to <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> in <em>parent</em>.</li>
        </ol>
      </li>
    </ol>
  </li>
</ol>

<p>At the completion of the recursive algorithm, <em>results</em> will contain the top-level
  <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>s.</p>
<p>The final two steps of the framing algorithm require
  <em>results</em> to be compacted according to the
  <a href="../json-ld-api/index.html#compaction-algorithm">Compaction Algorithm</a> by using the
  context provided in the <a class="tref internalDFN" title="input_frame" href="#dfn-input_frame">input frame</a>. If the frame has no context, compaction
  is performed with an empty context (not a null context). The compaction result <em class="rfc2119" title="must">must</em> use
  the <code>@graph</code> keyword at the top-level, even if the context is empty or if there
  is only one element to put in the <code>@graph</code> array. Subsequently, replace all key-value
  pairs where the key is <code>@preserve</code> with the value from the key-pair. If the value
  from the key-pair is <code>@null</code>, replace the value with <a class="tref internalDFN" title="null" href="#dfn-null">null</a>. If,
  after replacement, an array contains only the value <a class="tref internalDFN" title="null" href="#dfn-null">null</a> remove the value, leaving
  an empty array. The resulting value is the final <a class="tref internalDFN" title="json-ld_output" href="#dfn-json-ld_output">JSON-LD output</a>.</p>

</section>

<section id="remove-embed">
<h4><span class="secno">3.3.3 </span>Remove Embedded Definition</h4>
<p>This algorithm replaces an already embedded <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> with a
  <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>. It then recursively removes any entries in the
  <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a> that had the removed <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> in
  their parent chain.</p>
<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">About as clear as mud</p></div>
<div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/119"><span>Issue 119</span></a></div><p class="">The current behaviour avoids embedding the same data
  multiple times in the result makes it difficult to work with the output. A proposal
  to change this to &quot;agressive re-embedding&quot; is currently being discussed.</p></div>
<p>The algorithm is invoked with a <a class="tref internalDFN" title="framing_context" href="#dfn-framing_context">framing context</a> and subject id <em>id</em>.</p>
<ol class="algorithm">
  <li>Find <em>embed</em> from <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a> for <em>id</em>.</li>
  <li>Let <em>parent</em> and <em>property</em> be from <em>embed</em>.</li>
  <li>If <em>parent</em> is an array, replace the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> that matches
    <em>id</em> with a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>. If parent is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>,
    replace the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> for <em>property</em> that matches <em>id</em>
    with a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>.</li>
  <li>Remove dependents for <em>id</em> in <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>
    by scanning the map for entries with <em>parent</em> that have an <code>@id</code> of <em>id</em>,
    removing that definition from the map, and then removing the dependents for the <em>parent</em> id
    recursively by repeating this step. This step will terminate when there are no more embed
    entries containing the removed <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>'s <code>@id</code> in their
    parent chain.</li>
</ol>
</section>

<section id="embed-values">
<h4><span class="secno">3.3.4 </span>Embed Values</h4>
<p>This algorithm recursively embeds property values in <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> <em>output</em>, given a
  <a class="tref internalDFN" title="framing_context" href="#dfn-framing_context">framing context</a>, input <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> <em>element</em>, <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>,
  and <em>output</em>.</p>
<ol class="algorithm">
  <li>For each <em>item</em> in <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> of <em>element</em>:
    <ol class="algorithm">
      <li>If <em>item</em> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with the key <code>@list</code>,
        then create a new <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with a key <code>@list</code> and
        a value of an empty array and add it to <em>output</em>, appending if <em>output</em>
        is an array, and appending to <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> otherwise. Recursively call this
        algorithm passing <em>item</em> as <em>element</em>, <code>@list</code> as <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a>,
        and the new array as <em>output</em>. Continue to the next <em>item</em>.</li>
      <li>If <em>item</em> is a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>:
        <ol class="algorithm">
          <li>If <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a> does not contain an entry for the <code>@id</code> of <em>item</em>:
            <ol class="algorithm">
              <li>Initialize <em>embed</em> with <em>output</em> as <em>parent</em> and
                <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> as <em>property</em>
                and add to <a class="tref internalDFN" title="map_of_embeds" href="#dfn-map_of_embeds">map of embeds</a>.</li>
              <li>Initialize a new <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> <em>o</em> to act as the
                embedded <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>.</li>
              <li>For each <em>property</em> and <em>value</em> in the expanded definition for
                <em>item</em> in <em>subjects</em>:
                <ol class="algorithm">
                  <li>Add <em>property</em> and a copy of <em>value</em> to <em>o</em> if <em>property</em>
                    is a <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>.</li>
                  <li>Otherwise, recursively call this algorithm passing <em>value</em> as <em>element</em>,
                    <em>property</em> as <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> and <em>o</em> as <em>output</em>.</li>
                </ol>
              </li>
            </ol>
          </li>
          <li>Set <em>item</em> to <em>o</em>.</li>
        </ol>
      </li>
    </ol>
  </li>
  <li>If <em>output</em> is an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, append a copy of <em>item</em>, otherwise
    append a copy of <em>item</em> to <a class="tref internalDFN" title="active_property" href="#dfn-active_property">active property</a> in <em>output</em>.</li>
</ol>
</section>
</section>

</section>

<section class="appendix informative" id="iana-considerations">

<!--OddPage-->
<h2><span class="secno">A. </span>IANA Considerations</h2><p><em>This section is non-normative.</em></p>

<p>This section is included merely for standards community review and will be
submitted to the Internet Engineering Steering Group if this specification
becomes a W3C Recommendation.</p>

<h2 id="application-ld-frame-json">application/ld-frame+json</h2>
<dl>
  <dt>Type name:</dt>
  <dd>application</dd>
  <dt>Subtype name:</dt>
  <dd>ld-frame+json</dd>
  <dt>Required parameters:</dt>
  <dd>None</dd>
  <dt>Optional parameters:</dt>
  <dd>None</dd>
  <dt>Encoding considerations:</dt>
  <dd>The same as the <code>application/json</code> MIME media type.</dd>
  <dt>Security considerations:</dt>
  <dd>Since a JSON-LD frame is intended to specify a deterministic layout
    for a JSON-LD graph, the serialization <em class="rfc2119" title="should not">should not</em> be passed through a
    code execution mechanism such as JavaScript's <code>eval()</code>
    function. It is <em class="rfc2119" title="recommended">recommended</em> that a conforming parser does not attempt to
    directly evaluate the JSON-LD frame and instead purely parse the
    input into a language-native data structure.</dd>
  <dt>Interoperability considerations:</dt>
  <dd>Not Applicable</dd>
  <dt>Published specification:</dt>
  <dd>The <a href="http://json-ld.org/spec/latest/">JSON-LD</a> specification.</dd>
  <dt>Applications that use this media type:</dt>
  <dd>Any programming environment that requires the exchange of
    directed graphs. Implementations of JSON-LD have been created for
    JavaScript, Python, Ruby, PHP and C++.
  </dd>
  <dt>Additional information:</dt>
  <dd>
    <dl>
      <dt>Magic number(s):</dt>
      <dd>Not Applicable</dd>
      <dt>File extension(s):</dt>
      <dd>.jsonldf</dd>
      <dt>Macintosh file type code(s):</dt>
      <dd>TEXT</dd>
    </dl>
  </dd>
  <dt>Person &amp; email address to contact for further information:</dt>
  <dd>Manu Sporny &lt;msporny@digitalbazaar.com&gt;</dd>
  <dt>Intended usage:</dt>
  <dd>Common</dd>
  <dt>Restrictions on usage:</dt>
  <dd>None</dd>
  <dt>Author(s):</dt>
  <dd>Manu Sporny, Gregg Kellogg, Markus Lanthaler, Dave Longley</dd>
  <dt>Change controller:</dt>
  <dd>W3C</dd>
</dl>

<p>Fragment identifiers have no meaning with
  <a href="#application-ld-frame-json">application/frame-ld+json</a> resources.</p>

</section>

<section class="appendix" id="acknowledgements">

<!--OddPage-->
<h2><span class="secno">B. </span>Acknowledgements</h2>

<p>A large amount of thanks goes out to the JSON-LD Community Group
participants who worked through many of the technical issues on the mailing
list and the weekly telecons - of special mention are Niklas Lindström,
François Daoust, and Zdenko 'Denny' Vrandečić.
The editors would like to thank Mark Birbeck, who provided a great deal of
the initial push behind the JSON-LD work via his work on RDFj.
The work of Dave Lehn and Mike Johnson are appreciated for reviewing,
and performing several implementations of the specification. Ian Davis is
thanked for this work on RDF/JSON. Thanks also to Nathan Rixham,
Bradley P. Allen,
Kingsley Idehen, Glenn McDonald, Alexandre Passant, Danny Ayers, Ted
Thibodeau Jr., Olivier Grisel, Josh Mandel, Eric Prud'hommeaux,
David Wood, Guus Schreiber, Pat Hayes, Sandro Hawke, and Richard
Cyganiak for their input on the specification.
</p></section>



<section id="references" class="appendix">
<!--OddPage-->
<h2><span class="secno">C. </span>References</h2><section id="normative-references"><h3><span class="secno">C.1 </span>Normative references</h3><dl class="bibliography"><dt id="bib-JSON-LD">[JSON-LD]</dt><dd><cite><a href="http://json-ld.org/spec/ED/json-ld-syntax/20120522/">The JSON-LD Syntax</a></cite> Manu Sporny, Gregg Kellogg, Markus Lanthaler Editors. World Wide Web Consortium (work in progress). 22 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://json-ld.org/spec/ED/json-ld-syntax/20120522/. The <a href="http://json-ld.org/spec/latest/json-ld-syntax/">latest edition of the JSON-LD Syntax</a> is available at http://json-ld.org/spec/latest/json-ld-syntax/
</dd><dt id="bib-JSON-LD-API">[JSON-LD-API]</dt><dd><cite><a href="http://json-ld.org/spec/ED/json-ld-api/20120524/">The JSON-LD API 1.0</a></cite> Manu Sporny, Gregg Kellogg, Dave Longley, Markus Lanthaler, Editors. World Wide Web Consortium (work in progress). 24 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://json-ld.org/spec/ED/json-ld-api/20120524/. The <a href="http://json-ld.org/spec/latest/json-ld-api/">latest edition of the JSON-LD Syntax</a> is available at http://json-ld.org/spec/latest/json-ld-api/
</dd><dt id="bib-RDF-CONCEPTS">[RDF-CONCEPTS]</dt><dd><cite><a href="http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/">RDF 1.1 Concepts and Abstract Syntax</a></cite> Richard Cyganiak, David Wood, Editors. World Wide Web Consortium (work in progress). 30 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/. The <a href="http://www.w3.org/TR/rdf11-concepts/">latest edition of the JSON-LD Syntax</a> is available at http://www.w3.org/TR/rdf11-concepts/
</dd><dt id="bib-RFC3987">[RFC3987]</dt><dd>M. Dürst; M. Suignard. <a href="http://www.ietf.org/rfc/rfc3987.txt"><cite>Internationalized Resource Identifiers (IRIs).</cite></a> January 2005. Internet RFC 3987. URL: <a href="http://www.ietf.org/rfc/rfc3987.txt">http://www.ietf.org/rfc/rfc3987.txt</a>
</dd><dt id="bib-RFC4627">[RFC4627]</dt><dd>D. Crockford. <a href="http://www.ietf.org/rfc/rfc4627.txt"><cite>The application/json Media Type for JavaScript Object Notation (JSON)</cite></a> July 2006. Internet RFC 4627. URL: <a href="http://www.ietf.org/rfc/rfc4627.txt">http://www.ietf.org/rfc/rfc4627.txt</a>
</dd><dt id="bib-WEBIDL">[WEBIDL]</dt><dd><cite><a href="http://www.w3.org/TR/2012/CR-WebIDL-20120419/">Web IDL</a></cite> Cameron McCormack, Editor. World Wide Web Consortium. 19 April 2012. Candidate Recommendataion. This edition of Web IDL is http://www.w3.org/TR/2012/CR-WebIDL-20120419/. The <a href="http://dev.w3.org/2006/webapi/WebIDL/">latest edition of Web IDL</a> is available at http://dev.w3.org/2006/webapi/WebIDL/
</dd></dl></section><section id="informative-references"><h3><span class="secno">C.2 </span>Informative references</h3><dl class="bibliography"><dt id="bib-ECMA-262">[ECMA-262]</dt><dd><a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm"><cite>ECMAScript Language Specification.</cite></a> June 2011. URL: <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">http://www.ecma-international.org/publications/standards/Ecma-262.htm</a>
</dd></dl></section></section></body></html>
